在Kernel裡面有一項功能,就是所謂的號誌(semaphore)的功能,裡面包括:
1.號誌控制區塊(semaphore control block)
2.ID名稱
3.Value數值
4.任務等待列
這個信號機制,主要是方便Kernel追蹤用的,號誌發送的方式是,當一個任務獲取一個號誌時,號誌裡的數值就會因為發送號誌,而少掉一個;反之,當任務完成之後,號誌就會送回號誌控制區塊內,號誌的數值就收回,加回一個。
一個Kernel能夠支援不同的號誌,大致分成下列三種:二進位號誌、計數號誌以及互斥號誌
A.二進位的號誌binary semaphore:
在二進位的Kernel裡面,通常都是0與1的存在,所以號誌的產生,就是二進位的號誌(binary semaphore)。
如果二進位的號誌是0的狀態底下,Kernel就會認為這個號誌是不能用的(unavailable),或是空的(empty),反之,如果二進位號誌的值是1的狀態底下,Kernel就會認為這個號誌是有用的(available),或是滿的(full)。
B.計數號誌Counting semaphore:
如果遇到多工的任務的時,通常會一次要求提供多個號誌,此時,就會出現大於1個數值的情況發生,也就是其實它是一連串的給1這個值的數量,或許是一個多工任務,一次給4個1,1111這樣形態,這樣就會一次發出四個號誌,這就稱做記數號誌。
C.互斥號誌(mutual exclusion semaphore)
這種互斥信號,跟上述兩種號誌不同的地方,在於它是一種開關(lock and unlock)的狀態,這個互斥的號誌主要保證任務不會被刪除,通常會有很多任務產生,如果沒有這個機制,讓Kernel裡面有一堆號誌互相混雜處在一個即時作業系統內,可能就會意外的剔除或收回,所以如果有這個互斥號誌,就能避免過於混亂,而造成被作業系統給剔除的結果,此外,有標示互斥信號情況下,也可以避免優先順訊任意倒置的狀況發生。